﻿//#define _CRT_SECURE_NO_WARNINGS 1
//#include<iostream>
//#include<string>
//using namespace std;

//int main()
//{
//	string s1 = ("hello world ");
//	s1.push_back('a');//尾插字符a
//	cout << s1 << endl;
//
//	s1.append("bbb");//追加字符串
//	cout << s1 << endl;
//
//	s1 += ("ccc");//追加字符串
//	cout << s1 << endl;
//
//	size_t pos = s1.find('w');//从前往后查找字符'w’的位置
//	string suffix = s1.substr(pos, 10);//从字符'w'位置截取10个字符
//	cout << suffix << endl;
//
//	size_t r_pos = s1.rfind('b');//从后向前查找字符'b’的位置
//	string r_suffix = s1.substr(r_pos, 10);
//	cout << r_suffix << endl;
//
//	string s2("next to meet you");
//	s2.insert(0, "Hi ");//头插
//	cout << s2 << endl;
//
//	s2.erase(0, 1);//头删
//	cout << s2 << endl;
//
//	s2.erase(s2.begin());//头删
//	cout << s2 << endl;
//
//	s2.erase(s2.size() - 1, 1);//尾删
//	cout << s2 << endl;
//
//	s2.erase(--s2.end());//尾删
//	cout << s2 << endl;
//
//
//	string file;
//	cin >> file;
//	FILE* fout = fopen(file.c_str(), "r");//使用C 要返回C格式的字符串
//	char ch = fgetc(fout);
//	while (ch != EOF)
//	{
//		cout << ch;
//		ch = fgetc(fout);
//	}
//	fclose(fout);
//
//	return 0;
//}

//int main()
//{
//	string s1("hello world ");
//
//	string s2 = s1 + "abc";
//	cout << s2 << endl;
//
//	return 0;
//}

//int main()
//{
//	string s("1111");
//
//	return 0;
//}

//int main()
//{
//	std::string s("hello world");
//	std::string s1 = s.substr(0, 3);
//	std::cout << s1 << endl;
//
//	return 0;
//}




#include"string.h"

namespace zsy
{
	void test1()
	{
		string s1("hello world");
		cout << s1.capacity() << endl;

		s1.reserve(30);
		cout << s1.capacity() << endl;

		s1.push_back('x');
		cout << s1.c_str() << endl;

		s1.append("yyyy");
		cout << s1.c_str() << endl;

		s1 += 'a';
		s1 += "bbb";
		cout << s1.c_str() << endl;
	}

	void test2()
	{
		string s2("hello world");

		s2.insert(0, 'x');
		s2.insert(1, "yyy");
		cout << s2.c_str() << endl;

		s2.erase(0,5);
		cout << s2.c_str() << endl;
	}

	void test3()
	{
		string s3("hello world");

		size_t ret1 = s3.find('w',7);
		size_t ret2 = s3.find("world");
		cout << ret1 << endl;
		cout << ret2 << endl;
	}

	void test4()
	{
		string s4("hello world");
		string sub = s4.substr(1, 4);
		cout << sub.c_str() << endl;
	}

	void test5()
	{
		string s5("abcdef");
		string s6("b");
		cout << (s5 == s6) << endl;
		cout << (s5 < s6) << endl;
		cout << (s5 <= s6) << endl;
		cout << (s5 > s6) << endl;
		cout << (s5 >= s6) << endl;
		cout << (s5 != s6) << endl;
	}

	void test6()
	{
		string s7("hello world");
		s7[0] = 'w';
		cout << s7 << endl;

		const string s8("hello world");//可读不可写
		cout << s8[0] << endl;

		string s9;
		cin >> s9;
		cout << s9 << endl;
		
	}

	void test7()
	{
		string s10("hello world");
		string s11(s10);//拷贝构造(新对象初始化) string s11 = s10;
		string s12;
		s12 = s10;//赋值(两个已经存在的对象) 

		cout << s11 << endl;
		cout << s12 << endl;
	}
}

int main()
{
	//zsy::test1();
	//zsy::test2();
	//zsy::test3();
	//zsy::test4();
	//zsy::test5();
	//zsy::test6();
	zsy::test7();
	return 0;
}


class String
{
public:
	String(const char* str = "")
	{
		if (nullptr == str)
		{
			assert(false);
			return;
		}
		_str = new char[strlen(str) + 1];
		strcpy(_str, str);
	}

	String(const String& s)
		:_str(new char[strlen(s._str) + 1])
	{
		strcpy(_str, s._str);
	}

	~String()
	{
		if (_str)
		{
			delete[] _str;
			_str = nullptr;
		}
	}
private:
	char* _str;
};

void TestString()
{
	String s1("hello world");
	String s2(s1);
}